<template>
	<div class="wrapper">

		<!-- header部分 -->
		<header>
			<a href="javascript:;" @click="customGoBack" class="back-button">
				<i class="fa fa-arrow-left"></i> 返回
			</a>
			<p>确认订单</p>
		</header>

		<!-- 订单信息部分 -->
		<div class="order-info">
			<h5>订单配送至：</h5>
			<div class="order-info-address" @click="toUserAddress">
				<p>{{ deliveryaddress != null ? deliveryaddress.address : '请选择送货地址' }}</p>
				<i class="fa fa-angle-right"></i>
			</div>
			<p v-if="deliveryaddress != null">{{ deliveryaddress.contactName }}{{
				formatSex(deliveryaddress.contactSex) }}
				{{ deliveryaddress.contactTel }}</p>
			<p v-else>&nbsp;</p>
		</div>

		<h3>{{ business.businessName }}</h3>

		<!-- 订单明细部分 -->
		<ul class="order-detailed">
			<li v-for="item in cartArr">
				<div class="order-detailed-left">
					<img :src="item.food.foodImg">
					<p>{{ item.food.foodName }} x {{ item.quantity }}</p>
				</div>
				<p>&#165;{{ this.calculateTotalPrice(item.food.foodPrice, item.quantity) }}</p>
			</li>
		</ul>
		<div class="order-deliveryfee">
			<p>配送费</p>
			<p>&#165;{{ this.toFixed2(business.deliveryPrice) }}</p>
		</div>

		<!-- 合计部分 -->
		<div class="total">
			<div class="total-left">
				&#165;{{ this.toFixed2(totalPrice) }}
			</div>
			<div class="total-right" @click="toPayment">
				去支付
			</div>
		</div>
	</div>
	<CustomAlert ref="customAlert" />
</template>

<script>

import CustomAlert from '../components/CustomAlert';
import BigNumber from 'bignumber.js';

export default {
	name: 'Orders',
	data() {
		return {
			businessId: this.$route.query.businessId,
			business: {},
			user: {},
			cartArr: [],
			deliveryaddress: {},
		}
	},
	created() {
		this.user = this.$getSessionStorage('user');
		this.deliveryaddress = this.$getLocalStorage(this.user.userId);

		//查询当前商家
		this.$axios.get(`/Businesses/businessId/${this.businessId}`)
			.then(response => {
				this.business = response.data;
			}).catch(error => {
				console.error(error);
			});

		//查询当前用户在购物车中的当前商家食品列表
		this.$axios.get(`/Carts/userId/${this.user.userId}?businessId=${this.businessId}`)
			.then(response => {
				this.cartArr = response.data;
			}).catch(error => {
				console.error(error);
			});
	},
	computed: {
		totalPrice() {
			let totalPrice = new BigNumber(0); // 初始化 totalPrice 为 BigNumber 对象
			for (let cartItem of this.cartArr) {
				// 将 BigDecimal 转换为 BigNumber 对象
				const foodPrice = new BigNumber(cartItem.food.foodPrice);
				const quantity = new BigNumber(cartItem.quantity);
				totalPrice = totalPrice.plus(foodPrice.multipliedBy(quantity)); // 累加每项商品的总价格
			}
			// 加上配送费用
			const deliveryPrice = new BigNumber(this.business.deliveryPrice);
			totalPrice = totalPrice.plus(deliveryPrice); // 加上配送费用

			// 返回格式化后的价格，保留两位小数
			return totalPrice.toFixed(2);
		}
	},
	methods: {
		customGoBack() {
			this.$router.push({ path: '/businessInfo', query: { businessId: this.businessId } });			
		},
		toFixed2(price) {
			return new BigNumber(price).toFixed(2);
		},
		calculateTotalPrice(price, quantity) {
			return new BigNumber(price).multipliedBy(quantity).toFixed(2);
		},
		formatSex(sex) {
			if (sex === 1) {
				return '先生';
			} else if (sex === 0) {
				return '女士';
			}
			return '未知'; // 如果性别数据不是 1 或 0，可以返回一个默认值
		},
		toUserAddress() {
			this.$router.push({ path: '/userAddress', query: { businessId: this.businessId } });
		},
		toPayment() {
			if (this.deliveryaddress == null) {
				this.$refs.customAlert.showAlert('请选择送货地址！');
				return;
			}

			//创建订单
			this.$axios.post(`Orders/userId/${this.user.userId}/businessId/${this.businessId}/daId/${this.deliveryaddress.daId}/orderTotal/${this.totalPrice}`)
				.then(response => {
					let orderId = response.data;
					if (orderId > 0) {
						this.$router.push({ path: '/payment', query: { orderId: orderId } });
					} else {
						this.$refs.customAlert.showAlert('创建订单失败！');
					}
				}).catch(error => {
					console.error(error);
				});
		}
	},
	components: {
		CustomAlert
	}
}
</script>

<style scoped>
/****************** 总容器 ******************/
.wrapper {
	width: 100%;
	height: 100%;
}

/****************** header部分 ******************/
.wrapper header {
	width: 100%;
	height: 12vw;
	background-color: #0097FF;
	color: #fff;
	font-size: 4.8vw;

	position: fixed;
	left: 0;
	top: 0;
	z-index: 1000;

	display: flex;
	justify-content: center;
	align-items: center;
}

.back-button {
	position: absolute;
	top: 3.5vw;
	/* 使用相对单位 */
	left: 2.5vw;
	/* 使用相对单位 */
	font-size: 4vw;
	/* 使用相对单位 */
	text-decoration: none;
	color: white;
	display: flex;
	align-items: center;
}

.back-button i {
	margin-right: 1vw;
	/* 使用相对单位 */
}

/* 针对大屏幕 (如 iPad) 的媒体查询 */
@media (min-width: 768px) {
	.wrapper header {
		width: 100%;
		height: 12vw;
		background-color: #0097FF;
		color: #fff;
		font-size: 4.8vw;

		position: fixed;
		left: 0;
		top: 0;
		z-index: 1000;

		display: flex;
		justify-content: center;
		align-items: center;
	}

	.back-button {
		position: absolute;
		top: 3.5vw;
		/* 使用相对单位 */
		left: 2.5vw;
		/* 使用相对单位 */
		font-size: 4vw;
		/* 使用相对单位 */
		text-decoration: none;
		color: white;
		display: flex;
		align-items: center;
	}

	.back-button i {
		margin-right: 1vw;
		/* 使用相对单位 */
	}

	/* 针对大屏幕 (如 iPad) 的媒体查询 */
	@media (min-width: 768px) {
		.wrapper header {
			height: 8vh;
			/* 使用相对高度单位 */
			font-size: 3vh;
		}

		.back-button {
			top: 2.5vh;
			/* 使用相对高度单位 */
			left: 2vh;
			font-size: 2.5vh;
			/* 相对大小单位 */
		}

		.back-button i {
			margin-right: 0.5vh;
		}
	}

	/****************** 订单信息部分 ******************/
	.wrapper .order-info {
		/*注意这里，不设置高，靠内容撑开。因为地址有可能折行*/
		width: 100%;
		margin-top: 12vw;
		background-color: #0097EF;
		box-sizing: border-box;
		padding: 2vw;
		color: #fff;
	}

	.back-button {
		top: 2.5vh;
		/* 使用相对高度单位 */
		left: 2vh;
		font-size: 2.5vh;
		/* 相对大小单位 */
	}

	.back-button i {
		margin-right: 0.5vh;
	}
}

/****************** 订单信息部分 ******************/
.wrapper .order-info {
	/*注意这里，不设置高，靠内容撑开。因为地址有可能折行*/
	width: 100%;
	margin-top: 12vw;
	background-color: #0097EF;
	box-sizing: border-box;
	padding: 2vw;
	color: #fff;
}

.wrapper .order-info h5 {
	font-size: 3vw;
	font-weight: 300;
}

.wrapper .order-info .order-info-address {
	width: 100%;
	display: flex;
	justify-content: space-between;
	align-items: center;

	font-weight: 700;
	user-select: none;
	cursor: pointer;
	margin: 1vw 0;
}

.wrapper .order-info .order-info-address p {
	width: 90%;
	font-size: 5vw;
}

.wrapper .order-info .order-info-address i {
	font-size: 6vw;
}

.wrapper .order-info p {
	font-size: 3vw;
}

.wrapper h3 {
	box-sizing: border-box;
	padding: 3vw;
	font-size: 4vw;
	color: #666;
	border-bottom: solid 1px #DDD;
}

/****************** 订单明细部分 ******************/
.wrapper .order-detailed {
	width: 100%;
}

.wrapper .order-detailed li {
	width: 100%;
	height: 16vw;
	box-sizing: border-box;
	padding: 3vw;
	color: #666;

	display: flex;
	justify-content: space-between;
	align-items: center;
}

.wrapper .order-detailed li .order-detailed-left {
	display: flex;
	align-items: center;
}

.wrapper .order-detailed li .order-detailed-left img {
	width: 10vw;
	height: 10vw;
}

.wrapper .order-detailed li .order-detailed-left p {
	font-size: 3.5vw;
	margin-left: 3vw;
}

.wrapper .order-detailed li p {
	font-size: 3.5vw;
}

.wrapper .order-deliveryfee {
	width: 100%;
	height: 16vw;
	box-sizing: border-box;
	padding: 3vw;
	color: #666;
	display: flex;
	justify-content: space-between;
	align-items: center;
	font-size: 3.5vw;
}

/****************** 订单合计部分 ******************/
.wrapper .total {
	width: 100%;
	height: 14vw;

	position: fixed;
	left: 0;
	bottom: 0;

	display: flex;
}

.wrapper .total .total-left {
	flex: 2;
	background-color: #505051;
	color: #fff;
	font-size: 4.5vw;
	font-weight: 700;
	user-select: none;

	display: flex;
	justify-content: center;
	align-items: center;
}

.wrapper .total .total-right {
	flex: 1;
	background-color: #38CA73;
	color: #fff;
	font-size: 4.5vw;
	font-weight: 700;
	user-select: none;
	cursor: pointer;

	display: flex;
	justify-content: center;
	align-items: center;
}
</style>